﻿#ifndef TEMPINFO_H
#define TEMPINFO_H

#include <QObject>
#include <QAbstractTableModel>

// TempInfo类用于存储温度信息，如名称和值
class TempInfo
{
public:
    // 构造函数，初始化名称和温度值
    TempInfo(QString s,qint16 v);
    QString name() const;
    // 获取名称
    void setName(const QString &name);

    // 获取温度值
    qint16 temp() const;
    // 设置温度值
    void setTemp(const qint16 &v);

    // 获取是否记录的标志
    bool record() const;
    // 设置是否记录的标志
    void setRecord(bool record);

    // 获取是否扫描的标志
    bool scan() const;
    // 设置是否扫描的标志
    void setScan(bool scan);

private:
    QString m_name;// 名称
    qint16 m_temp;// 温度值
    bool m_record;// 是否记录
    bool m_scan;// 是否扫描
};


class TempInfoModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    enum TempInfoRoles {
        nameRole = Qt::UserRole + 1,
        tempRole,
        recordRole,
        scanRole
     };

    // 构造函数，接受一个父对象
    explicit TempInfoModel(QObject *parent = 0);
    // 添加新的TempInfo对象到模型
    Q_INVOKABLE void addTempInfo(const QString &name,const qint16& temp);
    // 添加所有温度信息到模型
    Q_INVOKABLE void addAll();
   // 清除模型中的所有TempInfo对象
    Q_INVOKABLE void clear();

    // 返回模型中的行数
    int rowCount(const QModelIndex & parent = QModelIndex()) const;
    // 返回模型中的列数
    int columnCount(const QModelIndex & parent = QModelIndex()) const;

    // 返回指定模型索引和角色的数据
    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
    // 设置指定模型索引和角色的数据
    bool setData(const QModelIndex &index, const QVariant &value, int role);

    // 返回指定行和列的模型索引
    QModelIndex getIndex(int row,int col);

    //----------------------全记录
     Q_INVOKABLE void allRecord(bool value);
    //----------------------分记录
    Q_INVOKABLE void record(int index,bool value);

    //----------------------全扫描
    Q_INVOKABLE void allScan(bool value);
    //----------------------分扫描
    Q_INVOKABLE void scan(int index,bool value);

    //----------------是否记录和扫描
    bool getRecord(int index);
    bool getScan(int index);

signals:
    void isAllRecord(bool value);// 当所有温度信息的记录状态改变时发出信号
    void isAllScan(bool value);// 当所有温度信息的扫描状态改变时发出信号

public slots:
protected:
    // 返回一个哈希表，将自定义角色映射到角色名称
    QHash<int, QByteArray> roleNames() const;
private:
    // TempInfo信息列表
    QList<TempInfo> m_tempInfo;

};

#endif // TEMPINFO_H
